package com.friend.util;

import cn.hutool.core.bean.BeanUtil;
import com.friend.domain.question.Question;
import com.friend.domain.question.es.QuestionES;

import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/**
 * Question实体转换工具类
 * 专门处理Question和QuestionES之间的转换
 * 
 * 问题背景：
 * BeanUtils.copyProperties()在复制LocalDateTime类型字段时存在问题，
 * 可能导致只复制日期部分（如"2025-10-06"），丢失时间部分。
 * 
 * 解决方案：
 * QuestionES的createTime改为String类型，转换时手动格式化为日期字符串。
 */
public class QuestionConverter {

    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_DATE;

    /**
     * 将Question转换为QuestionES
     * 确保所有字段正确复制，createTime转换为日期字符串
     */
    public static QuestionES toQuestionES(Question question) {
        if (question == null) {
            return null;
        }
        
        QuestionES questionES = new QuestionES();
        
        // 复制基本属性（排除createTime，因为类型不同）
        BeanUtil.copyProperties(question, questionES, "createTime");
        
        // 手动转换createTime：LocalDateTime -> String (YYYY-MM-DD)
        if (question.getCreateTime() != null) {
            questionES.setCreateTime(question.getCreateTime().format(DATE_FORMATTER));
        }
        
        return questionES;
    }

    /**
     * 批量转换Question列表为QuestionES列表
     */
    public static List<QuestionES> toQuestionESList(List<Question> questionList) {
        if (questionList == null || questionList.isEmpty()) {
            return new ArrayList<>();
        }
        
        List<QuestionES> questionESList = new ArrayList<>(questionList.size());
        for (Question question : questionList) {
            questionESList.add(toQuestionES(question));
        }
        
        return questionESList;
    }
}

